#!/usr/bin/env python3
# -*- coding: utf-8 -*-
__author__ = '汤小洋'

'''
wordcloud库：用于根据文本生成词云，制作词云图
原理：根据词语在文本中出现的频率，以不同的字体大小进行显示

注：wordcloud库依赖于matplotlib库，用于生成2D图形
'''

from wordcloud import WordCloud, STOPWORDS

# wc = WordCloud()  # 创建WordCloud类的对象
# wc.generate('I Love Python,Python is prefect.')  # 生成词云
# wc.to_file('词云图.png')  # 将词云保存为图片


'''
wordcloud默认会以空格或标点为分隔符对文本进行分词处理，所以对于中文文本，需要结合jieba库来分词
步骤：
    1.使用jieba对文本进行分词
    2.将词语以空格拼接
    3.使用wordcloud生成词云
注：处理中文时需要指定中文字体，一般将字体文件与代码放到同一目录下（STKAITI.TTF表示华文楷体字体）    
'''

import jieba
import matplotlib.pyplot as plt

f = open('python.txt', encoding='utf8')
txt = f.read()
f.close()

# 1.使用jieba对文本进行分词
words = jieba.lcut(txt)
# 2.将词语以空格拼接
new_txt = ' '.join(words)
# 3.使用wordcloud生成词云
bg_image = plt.imread('bg.jpg')  # 将图片转换为ndarray类型，这是参数mask的要求（指定词云形状）
stopwords = STOPWORDS.copy()  # 设置屏蔽词，要排除的词语
stopwords.add('可以')
stopwords.add('一个')
wc = WordCloud(width=800, height=768, max_font_size=100, max_words=80, background_color='white', mask=bg_image,
               font_path='STKAITI.TTF', stopwords=stopwords).generate(new_txt)

wc.to_file('词云图.png')
